package com.demo.webapp.search.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor;

/**
 * 带有验证消息存储的Workflow拦截器
 * 该拦截器解决了一个验证框架作用下重定向时无法得到验证消息的问题
 * <p>作用说明:</p>
 *  <ul><li>配置了验证框架: xxx-validation.xml</li>
 *  	<li>该验证对应Action的Method配置了InputConfig注解</li>
 *  	<li>InputConfig注解的methodName或resultName属性最终定位到一个ServletRedirectResult结果</li>
 *  	<li>拦截器"store"<br>
 *  		&lt;interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /&gt;
 *  		配置在workflow拦截器之后:
 *  		<pre>
 *	&lt;interceptor-ref name="workflow"&gt;
 *	    &lt;param name="excludeMethods"&gt;input,back,cancel,browse&lt;/param&gt;
 *	&lt;/interceptor-ref&gt;
 *	&lt;interceptor-ref name="createSession"/&gt;
 *	&lt;interceptor-ref name="store"&gt;
 *	    &lt;param name="operationMode"&gt;AUTOMATIC&lt;/param&gt;
 *	&lt;/interceptor-ref&gt;
 *	       </pre>
 *  	</li>
 *  </ul>
 *  
 *  由于以上条件作用下,Workflow拦截器的
 * <p><strong><font color="red">*注意:</font></strong></p>
 * <p>这种配置似乎是一个错误的配置,因为Workflow应该配置在最后,当所有拦截器进行拦截后,判断是否有验证错误并将影响方法或结果走向(input)</p>
 * <p>而存储消息的"store"又配置到了Workflow之后,造成没有对消息存储之前,就被Workflow重定向了。</p>
 * <p>但是仍然出现问题在调整顺序后的"workflow"和"store",原因是"workflow"需要对validationAwareAction.hasErrors()进行判断
 * 而如果"store"在"workflow"之前,"store"将把session中的错误信息放入Action中,这样"workflow"的validationAwareAction.hasErrors()将发现有错误内容
 * 重新跳转到input方法,从而不会进入指定Action的method中,导致页面没有数据错误。需要的操作是,在"workflow"中设置excludeMethods,在"workflow"排除掉重定向的方法</p>
 * <strong>该方法只进行注释说明,如果看到以上问题,解决办法不是使用本方法,而是调整"store"与"workflow"的位置</strong>
 * @author ryuu.kk
 *
 */
public class StoreWorkflowInterceptor extends DefaultWorkflowInterceptor {

	/**
	 * 版本序列化ID
	 */
	private static final long serialVersionUID = -329235712520248621L;

	protected String doIntercept(ActionInvocation invocation) throws Exception {
		
		String result = super.doIntercept(invocation);

		// 执行workflow拦截器链后的拦截器（主要是store拦击器）
		//invocation.invoke();
		return result;
	}
}
